//网络请求的方式方法

import axios, {formToJSON} from "axios";
import router from "@/router";

import {baseUrl} from  "@/config/global/global"
const instance = axios.create({
    //路径请求头配置
    // baseURL:base.baseUrl,
    //网络请求的公共配置
    timeout:10000,  // 9秒以后如果没有请求则取消请求
    //headers 是发送时的请求头
    headers:{
        "Accept":'application/json',
        "Content-Type":"application/json",
    },
    baseURL: baseUrl //请求路径的头部
})

// 错误状态码的处理
const errorHandle = (status,info)=>{
    switch (status){
        case 400:
            console.log("语义有误");
            break;
        case 401:
            console.log("服务器认证失败");
            break;
        case 403:
            console.log("服务器拒绝访问");
            break;
        case 404:
            console.log("地址错误");
            break;
        case 500:
            console.log("服务器无响应");
            break;
        case 408:
            console.log("用户另一处登录");
            break;
        default:
            console.log(info); //其他的状态码则直接打印错误信息
            break;

    }
}
//拦截器最常用的
//1.发送数据之前
instance.interceptors.request.use(

    config=>{
         //获取token
        let AUTHORIZATION_TOKEN = window.localStorage.getItem("AUTHORIZATION_TOKEN")
        // //获取当前请求路径
        // let reqUrl=config.url;
        // if(reqUrl === "/front/user/login" && AUTHORIZATION_TOKEN != null){
        //     console.log("你已经登录，无需重复登录");
        //     router.push("/login").then()
        // }
        if(config.method==="post"){
            //把post请求的数据转换一下，防止出现错误乱码
            // config.data = formToJSON(config.data);
        }

        //如果有token 则把token放到请求头
        if(AUTHORIZATION_TOKEN!=null) {
            config.headers.token  = AUTHORIZATION_TOKEN;
        }
        return config;        //成功则返回所有的网络请求信息
    },
    error => {
        //返回所以错误的信息
        return Promise.reject(error)
    }
)
//2.获取数据之前
instance.interceptors.response.use(
    response=>{

        // if(response.data.code === 404 &&  localStorage.getItem("AUTHORIZATION_TOKEN") != null) {
        //     localStorage.removeItem("AUTHORIZATION_TOKEN")
        //     localStorage.removeItem("user")
        //     router.push("/login").then(r )
        // }
        // debugger
        if(response.data.code === 401){
            localStorage.clear()
            router.push("/login").then(()=>{})
            // alert.stop()

        }

        if( localStorage.getItem("AUTHORIZATION_TOKEN") != null){
            if(response.data.code !== 200){
                    //检查通信状态
                            if(response.data.code === 408){
                                alert("你的账号已在别处登录")
                                //被挤下线前的操作，清空数据
                                window.localStorage.clear()
                                router.push("/login");
                            }

            }


        }
        return response.status===200 ? Promise.resolve (response) : Promise.reject(response)
    },
    error => {
        const {response} = error;
        console.log(response)
        //错误的处理
        // errorHandle(response.status,response.info)
    }
)
//导出
export default instance;